﻿//using System.Collections.Generic;
//using RuoVea.ExApp;
//using RuoVea.ExSugar;
//using RuoVea.ExSugar.Attributes;
//using RuoVea.ExSugar.Util;
//using SqlSugar;

//namespace RuoVea.ExSugar.Tenant;

///// <summary>
///// 
///// </summary>
///// <typeparam name="T"></typeparam>
//public partial class TenantSugarRepository<T> : SimpleClient<T> where T : class, new()
//{
//    /// <summary>
//    /// 多租户事务
//    /// </summary>
//    protected ITenant iTenant = null; // 多租户事务

//    /// <summary>
//    /// 
//    /// </summary>
//    /// <param name="context"></param>
//    /// <param name="isTenant"></param>
//    public TenantSugarRepository(ISqlSugarClient context, bool isTenant) : base(context)
//    {
//        iTenant = App.GetRequiredService<ISqlSugarClient>().AsTenant();

//        // 若实体贴有多库特性，则返回指定的连接
//        if (typeof(T).IsDefined(typeof(TenantAttribute), false))
//        {
//            SugarAopUtil.SetDbAop(iTenant.GetConnectionScopeWithAttr<T>());
//            Context = iTenant.GetConnectionScopeWithAttr<T>();
//            return;
//        }

//        // 若实体贴有系统表特性，则返回默认的连接
//        if (typeof(T).IsDefined(typeof(SystemTableAttribute), false)) return;

//        // 若当前未登录或是默认租户Id，则返回默认的连接
//        var tenantId = App.GetRequiredService<UserManager>().TenantId;
//        if (tenantId < 1 || tenantId.ToString() == SqlSugarConst.ConfigId) return;

//        // 根据租户Id切库
//        if (!iTenant.IsAnyConnection(tenantId.ToString()))
//        {
//            var tenant = App.GetRequiredService<SysCacheService>().Get<List<SysTenant>>(CacheConst.KeyTenant).FirstOrDefault(u => u.Id == tenantId);
//            iTenant.AddConnection(new ConnectionConfig()
//            {
//                ConfigId = tenant.id,
//                DbType = tenant.DbType,
//                ConnectionString = tenant.Connection,
//                IsAutoCloseConnection = true
//            });
//            SugarAopUtil.SetDbAop(iTenant.GetConnectionScope(tenantId.ToString()));
//        }
//        Context = iTenant.GetConnectionScope(tenantId.ToString());
//    }
//}
